﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;

namespace DAL_MechSys
{
    public class DALVeiculo : DALBase
    {
        private DTOVeiculo CriarVeiculo(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOVeiculo dtoVeiculo = new DTOVeiculo();

                if (!string.IsNullOrEmpty(sqlDataReader["VeiculoID"].ToString()))
                {
                    dtoVeiculo.VeiculoID = (int)sqlDataReader["VeiculoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoVeiculo.ClienteID = (int)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Placa"].ToString()))
                {
                    dtoVeiculo.Placa = (string)sqlDataReader["Placa"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Marca"].ToString()))
                {
                    dtoVeiculo.Marca = (string)sqlDataReader["Marca"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Modelo"].ToString()))
                {
                    dtoVeiculo.Modelo = (string)sqlDataReader["Modelo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["AnoFab"].ToString()))
                {
                    dtoVeiculo.AnoFab = (int)sqlDataReader["AnoFab"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["AnoMod"].ToString()))
                {
                    dtoVeiculo.AnoMod = (int)sqlDataReader["AnoMod"];
                }

                return dtoVeiculo;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOVeiculo dtoVeiculo)
        {
            try
            {
                string storedProssidere = "sp_InserirVeiculo";
                SqlParameter[] parameters =
                
                {                   
                   new SqlParameter("@clienteID", dtoVeiculo.ClienteID),
                   new SqlParameter("@placa", dtoVeiculo.Placa),
                   new SqlParameter("@marca", dtoVeiculo.Marca),
                   new SqlParameter("@modelo", dtoVeiculo.Modelo),
                   new SqlParameter("@anofab", dtoVeiculo.AnoFab),                       
                   new SqlParameter("@anomod", dtoVeiculo.AnoMod),
                   new SqlParameter("@dataRegistro", DateTime.Now)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOVeiculo> BuscarVeiculosExcetoOficina()
        {
            List<DTOVeiculo> lstVeiculos = new List<DTOVeiculo>();

            try
            {
                string storedProssidere = "sp_BuscarVeiculosExcetoOficina";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOVeiculo dtoVeiculo = CriarVeiculo(sqlDataReader);

                        lstVeiculos.Add(dtoVeiculo);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstVeiculos;
        }

        public List<DTOVeiculo> BuscarVeiculosCadastrados()
        {
            List<DTOVeiculo> lstVeiculos = new List<DTOVeiculo>();

            try
            {
                string storedProssidere = "sp_BuscarVeiculosCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOVeiculo dtoVeiculo = CriarVeiculo(sqlDataReader);

                        lstVeiculos.Add(dtoVeiculo);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstVeiculos;
        }

        public void Atualizar(DTOVeiculo dtoVeiculo)
        {
            try
            {
                string storedProssidere = "sp_AtualizarVeiculo";
                SqlParameter[] parameters =

                        {               
                            new SqlParameter("@veiculoID", dtoVeiculo.VeiculoID),
                           new SqlParameter("@clienteID", dtoVeiculo.ClienteID),
                   new SqlParameter("@placa", dtoVeiculo.Placa),
                   new SqlParameter("@marca", dtoVeiculo.Marca),
                   new SqlParameter("@modelo", dtoVeiculo.Modelo),
                   new SqlParameter("@anofab", dtoVeiculo.AnoFab),                       
                   new SqlParameter("@anomod", dtoVeiculo.AnoMod),
                   new SqlParameter("@dataRegistro", DateTime.Now)
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int veiculoID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirVeiculo";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@veiculoID", veiculoID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public bool VerificaSeVeiculoIDExiste(int veiculoID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeVeiculoIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@veiculoID", veiculoID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }
        public List<DTOVeiculo> PesquisarVeiculosExcetoOficina(string texto, int codigo)
        {
            List<DTOVeiculo> lstVeiculo = new List<DTOVeiculo>();

            try
            {
                string storedProssidere = "sp_BuscarVeiculosExcetoOficinaPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto),
                   new SqlParameter("@int", codigo)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOVeiculo dtoVeiculo = CriarVeiculo(sqlDataReader);

                        lstVeiculo.Add(dtoVeiculo);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstVeiculo;

        }

        public List<DTOVeiculo> PesquisarVeiculos(string texto)
        {
            List<DTOVeiculo> lstVeiculo = new List<DTOVeiculo>();

            try
            {
                string storedProssidere = "sp_BuscarVeiculosPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOVeiculo dtoVeiculo = CriarVeiculo(sqlDataReader);

                        lstVeiculo.Add(dtoVeiculo);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstVeiculo;

        }

        public DTOVeiculo PesquisarVeiculosID(int VeiculoID)
        {
            DTOVeiculo dtoVeiculo = new DTOVeiculo();

            try
            {
                string storedProssidere = "sp_BuscarVeiculosPesquisaID";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@veiculoid", VeiculoID)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                         dtoVeiculo = CriarVeiculo(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoVeiculo;

        }
       
    }
}
